/*
 * Copyright (c) 2008, University of Aarhus.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * - Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 * - Neither the name of the Univeristy of Aarhus nor the names
 *   of its contributors may be used to endorse or promote products derived
 *   from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * @author: Morten Tranberg Hansen <mth@cs.au.dk>
 * @date:   May 8 2008	
 * 
 */
 
#include "sensobyg.h"

configuration SensoBygC {}
implementation {
	components SensoBygP;

	components 
		ActiveMessageC,
		CollectionC as Collection, 
		new CollectionSenderC(DATA_COLLECTION_ID),
		DisseminationC as Dissemination,
		new DisseminatorC(sensobyg_command_msg_t, CONFIGURATION_DISSEMINATION_ID),
		new SerialAMReceiverC(AM_SENSOBYG_COMMAND_MSG) as ConfigurationReceiver;

	/*** Radio Control ***/				
	SensoBygP.RadioControl -> ActiveMessageC;

	/*** Data Collection ***/
	SensoBygP.CollectionControl -> Collection;
	SensoBygP.CollectionSend -> CollectionSenderC;
	SensoBygP.CollectionReceive -> Collection.Receive[DATA_COLLECTION_ID];
	SensoBygP.RootControl -> Collection;
	SensoBygP.CollectionPacket -> Collection;

	/*** Command Dissemination ***/
	SensoBygP.DisseminationControl -> Dissemination;
	SensoBygP.CommandValue -> DisseminatorC;
	SensoBygP.CommandUpdate -> DisseminatorC;
	SensoBygP.CommandReceive -> ConfigurationReceiver;
	
	
#ifdef LOW_POWER_LISTENING
	components CC2420ActiveMessageC;
	SensoBygP.LowPowerListening -> CC2420ActiveMessageC;
#endif

	/*** Serial Communication (only used by roots) ***/
	components  
		SerialActiveMessageC,
		new QueueC(message_t*, SERIAL_QUEUE_SIZE) as SerialQueue,
		new PoolC(message_t, SERIAL_QUEUE_SIZE) as SerialMessagePool;
	
	SensoBygP.SerialControl -> SerialActiveMessageC;
	SensoBygP.SerialSend -> SerialActiveMessageC;
	SensoBygP.SerialAMPacket -> SerialActiveMessageC;
	SensoBygP.SerialPacket -> SerialActiveMessageC;
	SensoBygP.SerialQueue -> SerialQueue;
	SensoBygP.SerialMessagePool -> SerialMessagePool;

	/*** Misc ***/
	components 
		MainC, 
		LedsC, 
		RandomC,
		new TimerMilliC(), 
		SensoBygSensorC,
		LocalTimeMilliC;
		
	SensoBygP.Boot -> MainC;
	SensoBygP.Leds -> LedsC;
	SensoBygP.Timer -> TimerMilliC;
	SensoBygP.TemperatureSensor -> SensoBygSensorC;
	SensoBygP.LocalTime -> LocalTimeMilliC;


/*  components new PoolC(message_t, 20) as DebugMessagePool,
    new QueueC(message_t*, 20) as DebugSendQueue,
    new SerialAMSenderC(AM_COLLECTIONDEBUGMSG) as DebugSerialSender,
    UARTDebugSenderP as DebugSender;

  DebugSender.Boot -> MainC;
  DebugSender.UARTSend -> DebugSerialSender;
  DebugSender.MessagePool -> DebugMessagePool;
  DebugSender.SendQueue -> DebugSendQueue;
  Collection.CollectionDebug -> DebugSender;*/

}
